home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Misc / emu / fbzx.lha / fbzx / CodesXX.h < prev    next >
Text File  |  2002-12-31  |  15KB  |  397 lines

  1. /** Z80: portable Z80 emulator *******************************/
  2. /**                                                         **/
  3. /**                         CodesXX.h                       **/
  4. /**                                                         **/
  5. /** This file contains implementation for FD/DD tables of   **/
  6. /** Z80 commands. It is included from Z80.c.                **/
  7. /**                                                         **/
  8. /** Copyright (C) Marat Fayzullin 1994-2002                 **/
  9. /**     You are not allowed to distribute this software     **/
  10. /**     commercially. Please, notify me, if you make any    **/
  11. /**     changes to this file.                               **/
  12. /*************************************************************/
  13.  
  14. case JR_NZ:   if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;R->TStates+=5;M_JR; } break;
  15. case JR_NC:   if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;R->TStates+=5;M_JR; } break;
  16. case JR_Z:    if(R->AF.B.l&Z_FLAG) { R->ICount-=5;R->TStates+=5;M_JR; } else R->PC.W++; break;
  17. case JR_C:    if(R->AF.B.l&C_FLAG) { R->ICount-=5;R->TStates+=5;M_JR; } else R->PC.W++; break;
  18.  
  19. case JP_NZ:   if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break;
  20. case JP_NC:   if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break;
  21. case JP_PO:   if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break;
  22. case JP_P:    if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break;
  23. case JP_Z:    if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break;
  24. case JP_C:    if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break;
  25. case JP_PE:   if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break;
  26. case JP_M:    if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break;
  27.  
  28. case RET_NZ:  if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;R->TStates+=6;M_RET; } break;
  29. case RET_NC:  if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;R->TStates+=6;M_RET; } break;
  30. case RET_PO:  if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;R->TStates+=6;M_RET; } break;
  31. case RET_P:   if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;R->TStates+=6;M_RET; } break;
  32. case RET_Z:   if(R->AF.B.l&Z_FLAG)    { R->ICount-=6;R->TStates+=6;M_RET; } break;
  33. case RET_C:   if(R->AF.B.l&C_FLAG)    { R->ICount-=6;R->TStates+=6;M_RET; } break;
  34. case RET_PE:  if(R->AF.B.l&P_FLAG)    { R->ICount-=6;R->TStates+=6;M_RET; } break;
  35. case RET_M:   if(R->AF.B.l&S_FLAG)    { R->ICount-=6;R->TStates+=6;M_RET; } break;
  36.  
  37. case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;R->TStates+=7;M_CALL; } break;
  38. case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;R->TStates+=7;M_CALL; } break;
  39. case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;R->TStates+=7;M_CALL; } break;
  40. case CALL_P:  if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;R->TStates+=7;M_CALL; } break;
  41. case CALL_Z:  if(R->AF.B.l&Z_FLAG) { R->ICount-=7;R->TStates+=7;M_CALL; } else R->PC.W+=2; break;
  42. case CALL_C:  if(R->AF.B.l&C_FLAG) { R->ICount-=7;R->TStates+=7;M_CALL; } else R->PC.W+=2; break;
  43. case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;R->TStates+=7;M_CALL; } else R->PC.W+=2; break;
  44. case CALL_M:  if(R->AF.B.l&S_FLAG) { R->ICount-=7;R->TStates+=7;M_CALL; } else R->PC.W+=2; break;
  45.  
  46. case ADD_B:    M_ADD(R->BC.B.h);break;
  47. case ADD_C:    M_ADD(R->BC.B.l);break;
  48. case ADD_D:    M_ADD(R->DE.B.h);break;
  49. case ADD_E:    M_ADD(R->DE.B.l);break;
  50. case ADD_H:    M_ADD(R->XX.B.h);break;
  51. case ADD_L:    M_ADD(R->XX.B.l);break;
  52. case ADD_A:    M_ADD(R->AF.B.h);break;
  53. case ADD_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  54.                M_ADD(I);break;
  55. case ADD_BYTE: I=RdZ80(R->PC.W++);M_ADD(I);break;
  56.  
  57. case SUB_B:    M_SUB(R->BC.B.h);break;
  58. case SUB_C:    M_SUB(R->BC.B.l);break;
  59. case SUB_D:    M_SUB(R->DE.B.h);break;
  60. case SUB_E:    M_SUB(R->DE.B.l);break;
  61. case SUB_H:    M_SUB(R->XX.B.h);break;
  62. case SUB_L:    M_SUB(R->XX.B.l);break;
  63. case SUB_A:    R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break;
  64. case SUB_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  65.                M_SUB(I);break;
  66. case SUB_BYTE: I=RdZ80(R->PC.W++);M_SUB(I);break;
  67.  
  68. case AND_B:    M_AND(R->BC.B.h);break;
  69. case AND_C:    M_AND(R->BC.B.l);break;
  70. case AND_D:    M_AND(R->DE.B.h);break;
  71. case AND_E:    M_AND(R->DE.B.l);break;
  72. case AND_H:    M_AND(R->XX.B.h);break;
  73. case AND_L:    M_AND(R->XX.B.l);break;
  74. case AND_A:    M_AND(R->AF.B.h);break;
  75. case AND_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  76.                M_AND(I);break;
  77. case AND_BYTE: I=RdZ80(R->PC.W++);M_AND(I);break;
  78.  
  79. case OR_B:     M_OR(R->BC.B.h);break;
  80. case OR_C:     M_OR(R->BC.B.l);break;
  81. case OR_D:     M_OR(R->DE.B.h);break;
  82. case OR_E:     M_OR(R->DE.B.l);break;
  83. case OR_H:     M_OR(R->XX.B.h);break;
  84. case OR_L:     M_OR(R->XX.B.l);break;
  85. case OR_A:     M_OR(R->AF.B.h);break;
  86. case OR_xHL:   I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  87.                M_OR(I);break;
  88. case OR_BYTE:  I=RdZ80(R->PC.W++);M_OR(I);break;
  89.  
  90. case ADC_B:    M_ADC(R->BC.B.h);break;
  91. case ADC_C:    M_ADC(R->BC.B.l);break;
  92. case ADC_D:    M_ADC(R->DE.B.h);break;
  93. case ADC_E:    M_ADC(R->DE.B.l);break;
  94. case ADC_H:    M_ADC(R->XX.B.h);break;
  95. case ADC_L:    M_ADC(R->XX.B.l);break;
  96. case ADC_A:    M_ADC(R->AF.B.h);break;
  97. case ADC_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  98.                M_ADC(I);break;
  99. case ADC_BYTE: I=RdZ80(R->PC.W++);M_ADC(I);break;
  100.  
  101. case SBC_B:    M_SBC(R->BC.B.h);break;
  102. case SBC_C:    M_SBC(R->BC.B.l);break;
  103. case SBC_D:    M_SBC(R->DE.B.h);break;
  104. case SBC_E:    M_SBC(R->DE.B.l);break;
  105. case SBC_H:    M_SBC(R->XX.B.h);break;
  106. case SBC_L:    M_SBC(R->XX.B.l);break;
  107. case SBC_A:    M_SBC(R->AF.B.h);break;
  108. case SBC_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  109.                M_SBC(I);break;
  110. case SBC_BYTE: I=RdZ80(R->PC.W++);M_SBC(I);break;
  111.  
  112. case XOR_B:    M_XOR(R->BC.B.h);break;
  113. case XOR_C:    M_XOR(R->BC.B.l);break;
  114. case XOR_D:    M_XOR(R->DE.B.h);break;
  115. case XOR_E:    M_XOR(R->DE.B.l);break;
  116. case XOR_H:    M_XOR(R->XX.B.h);break;
  117. case XOR_L:    M_XOR(R->XX.B.l);break;
  118. case XOR_A:    R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break;
  119. case XOR_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  120.                M_XOR(I);break;
  121. case XOR_BYTE: I=RdZ80(R->PC.W++);M_XOR(I);break;
  122.  
  123. case CP_B:     M_CP(R->BC.B.h);break;
  124. case CP_C:     M_CP(R->BC.B.l);break;
  125. case CP_D:     M_CP(R->DE.B.h);break;
  126. case CP_E:     M_CP(R->DE.B.l);break;
  127. case CP_H:     M_CP(R->XX.B.h);break;
  128. case CP_L:     M_CP(R->XX.B.l);break;
  129. case CP_A:     R->AF.B.l=N_FLAG|Z_FLAG;break;
  130. case CP_xHL:   I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));
  131.                M_CP(I);break;
  132. case CP_BYTE:  I=RdZ80(R->PC.W++);M_CP(I);break;
  133.                
  134. case LD_BC_WORD: M_LDWORD(BC);break;
  135. case LD_DE_WORD: M_LDWORD(DE);break;
  136. case LD_HL_WORD: M_LDWORD(XX);break;
  137. case LD_SP_WORD: M_LDWORD(SP);break;
  138.  
  139. case LD_PC_HL: R->PC.W=R->XX.W;break;
  140. case LD_SP_HL: R->SP.W=R->XX.W;break;
  141. case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break;
  142. case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break;
  143.  
  144. case ADD_HL_BC:  M_ADDW(XX,BC);break;
  145. case ADD_HL_DE:  M_ADDW(XX,DE);break;
  146. case ADD_HL_HL:  M_ADDW(XX,XX);break;
  147. case ADD_HL_SP:  M_ADDW(XX,SP);break;
  148.  
  149. case DEC_BC:   R->BC.W--;break;
  150. case DEC_DE:   R->DE.W--;break;
  151. case DEC_HL:   R->XX.W--;break;
  152. case DEC_SP:   R->SP.W--;break;
  153.  
  154. case INC_BC:   R->BC.W++;break;
  155. case INC_DE:   R->DE.W++;break;
  156. case INC_HL:   R->XX.W++;break;
  157. case INC_SP:   R->SP.W++;break;
  158.  
  159. case DEC_B:    M_DEC(R->BC.B.h);break;
  160. case DEC_C:    M_DEC(R->BC.B.l);break;
  161. case DEC_D:    M_DEC(R->DE.B.h);break;
  162. case DEC_E:    M_DEC(R->DE.B.l);break;
  163. case DEC_H:    M_DEC(R->XX.B.h);break;
  164. case DEC_L:    M_DEC(R->XX.B.l);break;
  165. case DEC_A:    M_DEC(R->AF.B.h);break;
  166. case DEC_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_DEC(I);
  167.                WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I);
  168.                break;
  169.  
  170. case INC_B:    M_INC(R->BC.B.h);break;
  171. case INC_C:    M_INC(R->BC.B.l);break;
  172. case INC_D:    M_INC(R->DE.B.h);break;
  173. case INC_E:    M_INC(R->DE.B.l);break;
  174. case INC_H:    M_INC(R->XX.B.h);break;
  175. case INC_L:    M_INC(R->XX.B.l);break;
  176. case INC_A:    M_INC(R->AF.B.h);break;
  177. case INC_xHL:  I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_INC(I);
  178.                WrZ80(R->XX.W+(offset)RdZ80(R->PC.W++),I);
  179.                break;
  180.  
  181. case RLCA:
  182.   I=(R->AF.B.h&0x80? C_FLAG:0);
  183.   R->AF.B.h=(R->AF.B.h<<1)|I;
  184.   R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I;
  185.   break;
  186. case RLA:
  187.   I=(R->AF.B.h&0x80? C_FLAG:0);
  188.   R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG);
  189.   R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I;
  190.   break;
  191. case RRCA:
  192.   I=R->AF.B.h&0x01;
  193.   R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0);
  194.   R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I;
  195.   break;
  196. case RRA:
  197.   I=R->AF.B.h&0x01;
  198.   R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0);
  199.   R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I;
  200.   break;
  201.  
  202. case RST00:    M_RST(0x0000);break;
  203. case RST08:    M_RST(0x0008);break;
  204. case RST10:    M_RST(0x0010);break;
  205. case RST18:    M_RST(0x0018);break;
  206. case RST20:    M_RST(0x0020);break;
  207. case RST28:    M_RST(0x0028);break;
  208. case RST30:    M_RST(0x0030);break;
  209. case RST38:    M_RST(0x0038);break;
  210.  
  211. case PUSH_BC:  M_PUSH(BC);break;
  212. case PUSH_DE:  M_PUSH(DE);break;
  213. case PUSH_HL:  M_PUSH(XX);break;
  214. case PUSH_AF:  M_PUSH(AF);break;
  215.  
  216. case POP_BC:   M_POP(BC);break;
  217. case POP_DE:   M_POP(DE);break;
  218. case POP_HL:   M_POP(XX);break;
  219. case POP_AF:   M_POP(AF);break;
  220.  
  221. case DJNZ: if(--R->BC.B.h) { R->ICount-=5;R->TStates+=5;M_JR; } else R->PC.W++;break;
  222. case JP:   M_JP;break;
  223. case JR:   M_JR;break;
  224. case CALL: M_CALL;break;
  225. case RET:  M_RET;break;
  226. case SCF:  S(C_FLAG);R(N_FLAG|H_FLAG);break;
  227. case CPL:  R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break;
  228. case NOP:  break;
  229. case OUTA: OutZ80(RdZ80(R->PC.W++),R->AF.B.h);break;
  230. case INA:  R->AF.B.h=InZ80(RdZ80(R->PC.W++));break;
  231.  
  232. case HALT:
  233.   R->PC.W--;
  234.   R->IFF|=IFF_HALT;
  235.   R->IBackup=0;
  236.   R->ICount=0;
  237.   break;
  238.  
  239. case DI:
  240.   if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1;
  241.   R->IFF&=~(IFF_1|IFF_2|IFF_EI);
  242.   break;
  243.  
  244. case EI:
  245.   if(!(R->IFF&(IFF_1|IFF_EI)))
  246.   {
  247.     R->IFF|=IFF_2|IFF_EI;
  248.     R->IBackup=R->ICount;
  249.     R->ICount=1;
  250.   }
  251.   break;
  252.  
  253. case CCF:
  254.   R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG);
  255.   R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG;
  256.   break;
  257.  
  258. case EXX:
  259.   J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W;
  260.   J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W;
  261.   J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W;
  262.   break;
  263.  
  264. case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break;
  265. case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break;  
  266.   
  267. case LD_B_B:   R->BC.B.h=R->BC.B.h;break;
  268. case LD_C_B:   R->BC.B.l=R->BC.B.h;break;
  269. case LD_D_B:   R->DE.B.h=R->BC.B.h;break;
  270. case LD_E_B:   R->DE.B.l=R->BC.B.h;break;
  271. case LD_H_B:   R->XX.B.h=R->BC.B.h;break;
  272. case LD_L_B:   R->XX.B.l=R->BC.B.h;break;
  273. case LD_A_B:   R->AF.B.h=R->BC.B.h;break;
  274. case LD_xHL_B: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  275.                WrZ80(J.W,R->BC.B.h);break;
  276.  
  277. case LD_B_C:   R->BC.B.h=R->BC.B.l;break;
  278. case LD_C_C:   R->BC.B.l=R->BC.B.l;break;
  279. case LD_D_C:   R->DE.B.h=R->BC.B.l;break;
  280. case LD_E_C:   R->DE.B.l=R->BC.B.l;break;
  281. case LD_H_C:   R->XX.B.h=R->BC.B.l;break;
  282. case LD_L_C:   R->XX.B.l=R->BC.B.l;break;
  283. case LD_A_C:   R->AF.B.h=R->BC.B.l;break;
  284. case LD_xHL_C: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  285.                WrZ80(J.W,R->BC.B.l);break;
  286.  
  287. case LD_B_D:   R->BC.B.h=R->DE.B.h;break;
  288. case LD_C_D:   R->BC.B.l=R->DE.B.h;break;
  289. case LD_D_D:   R->DE.B.h=R->DE.B.h;break;
  290. case LD_E_D:   R->DE.B.l=R->DE.B.h;break;
  291. case LD_H_D:   R->XX.B.h=R->DE.B.h;break;
  292. case LD_L_D:   R->XX.B.l=R->DE.B.h;break;
  293. case LD_A_D:   R->AF.B.h=R->DE.B.h;break;
  294. case LD_xHL_D: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  295.                WrZ80(J.W,R->DE.B.h);break;
  296.  
  297. case LD_B_E:   R->BC.B.h=R->DE.B.l;break;
  298. case LD_C_E:   R->BC.B.l=R->DE.B.l;break;
  299. case LD_D_E:   R->DE.B.h=R->DE.B.l;break;
  300. case LD_E_E:   R->DE.B.l=R->DE.B.l;break;
  301. case LD_H_E:   R->XX.B.h=R->DE.B.l;break;
  302. case LD_L_E:   R->XX.B.l=R->DE.B.l;break;
  303. case LD_A_E:   R->AF.B.h=R->DE.B.l;break;
  304. case LD_xHL_E: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  305.                WrZ80(J.W,R->DE.B.l);break;
  306.  
  307. case LD_B_H:   R->BC.B.h=R->XX.B.h;break;
  308. case LD_C_H:   R->BC.B.l=R->XX.B.h;break;
  309. case LD_D_H:   R->DE.B.h=R->XX.B.h;break;
  310. case LD_E_H:   R->DE.B.l=R->XX.B.h;break;
  311. case LD_H_H:   R->XX.B.h=R->XX.B.h;break;
  312. case LD_L_H:   R->XX.B.l=R->XX.B.h;break;
  313. case LD_A_H:   R->AF.B.h=R->XX.B.h;break;
  314. case LD_xHL_H: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  315.                WrZ80(J.W,R->HL.B.h);break;
  316.  
  317. case LD_B_L:   R->BC.B.h=R->XX.B.l;break;
  318. case LD_C_L:   R->BC.B.l=R->XX.B.l;break;
  319. case LD_D_L:   R->DE.B.h=R->XX.B.l;break;
  320. case LD_E_L:   R->DE.B.l=R->XX.B.l;break;
  321. case LD_H_L:   R->XX.B.h=R->XX.B.l;break;
  322. case LD_L_L:   R->XX.B.l=R->XX.B.l;break;
  323. case LD_A_L:   R->AF.B.h=R->XX.B.l;break;
  324. case LD_xHL_L: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  325.                WrZ80(J.W,R->HL.B.l);break;
  326.  
  327. case LD_B_A:   R->BC.B.h=R->AF.B.h;break;
  328. case LD_C_A:   R->BC.B.l=R->AF.B.h;break;
  329. case LD_D_A:   R->DE.B.h=R->AF.B.h;break;
  330. case LD_E_A:   R->DE.B.l=R->AF.B.h;break;
  331. case LD_H_A:   R->XX.B.h=R->AF.B.h;break;
  332. case LD_L_A:   R->XX.B.l=R->AF.B.h;break;
  333. case LD_A_A:   R->AF.B.h=R->AF.B.h;break;
  334. case LD_xHL_A: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  335.                WrZ80(J.W,R->AF.B.h);break;
  336.  
  337. case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break;
  338. case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break;
  339.  
  340. case LD_B_xHL:    R->BC.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  341. case LD_C_xHL:    R->BC.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  342. case LD_D_xHL:    R->DE.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  343. case LD_E_xHL:    R->DE.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  344. case LD_H_xHL:    R->HL.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  345. case LD_L_xHL:    R->HL.B.l=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  346. case LD_A_xHL:    R->AF.B.h=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W++));break;
  347.  
  348. case LD_B_BYTE:   R->BC.B.h=RdZ80(R->PC.W++);break;
  349. case LD_C_BYTE:   R->BC.B.l=RdZ80(R->PC.W++);break;
  350. case LD_D_BYTE:   R->DE.B.h=RdZ80(R->PC.W++);break;
  351. case LD_E_BYTE:   R->DE.B.l=RdZ80(R->PC.W++);break;
  352. case LD_H_BYTE:   R->XX.B.h=RdZ80(R->PC.W++);break;
  353. case LD_L_BYTE:   R->XX.B.l=RdZ80(R->PC.W++);break;
  354. case LD_A_BYTE:   R->AF.B.h=RdZ80(R->PC.W++);break;
  355. case LD_xHL_BYTE: J.W=R->XX.W+(offset)RdZ80(R->PC.W++);
  356.                   WrZ80(J.W,RdZ80(R->PC.W++));break;
  357.  
  358. case LD_xWORD_HL:
  359.   J.B.l=RdZ80(R->PC.W++);
  360.   J.B.h=RdZ80(R->PC.W++);
  361.   WrZ80(J.W++,R->XX.B.l);
  362.   WrZ80(J.W,R->XX.B.h);
  363.   break;
  364.  
  365. case LD_HL_xWORD:
  366.   J.B.l=RdZ80(R->PC.W++);
  367.   J.B.h=RdZ80(R->PC.W++);
  368.   R->XX.B.l=RdZ80(J.W++);
  369.   R->XX.B.h=RdZ80(J.W);
  370.   break;
  371.  
  372. case LD_A_xWORD:
  373.   J.B.l=RdZ80(R->PC.W++);
  374.   J.B.h=RdZ80(R->PC.W++);
  375.   R->AF.B.h=RdZ80(J.W);
  376.   break;
  377.  
  378. case LD_xWORD_A:
  379.   J.B.l=RdZ80(R->PC.W++);
  380.   J.B.h=RdZ80(R->PC.W++);
  381.   WrZ80(J.W,R->AF.B.h);
  382.   break;
  383.  
  384. case EX_HL_xSP:
  385.   J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->XX.B.l);
  386.   J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->XX.B.h);
  387.   R->XX.W=J.W;
  388.   break;
  389.  
  390. case DAA:
  391.   J.W=R->AF.B.h;
  392.   if(R->AF.B.l&C_FLAG) J.W|=256;
  393.   if(R->AF.B.l&H_FLAG) J.W|=512;
  394.   if(R->AF.B.l&N_FLAG) J.W|=1024;
  395.   R->AF.W=DAATable[J.W];
  396.   break;
  397.